package com.qf.course.core.util;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 课程申请的工具类
 * description:
 * author: Ken
 * 公众号：Java架构栈
 */
public class ApplyUtils {

    private static Map<Integer, AtomicInteger> map = new ConcurrentHashMap<>();

    /**
     * 设置课程
     */
    public static void setCourse(Integer cid, Integer maxApplyNumber){
        map.put(cid, new AtomicInteger(maxApplyNumber));
    }

    /**
     * 申请课程座位
     * @param cid
     * @return -1 课程不存在  -2 座位已经被抢完  >=0 申请成功
     */
    public static int apply(Integer cid){
        if (!map.containsKey(cid)) return -1;
        //获取当前课程可申请的剩余人数
        AtomicInteger applyHasNumber = map.get(cid);
        //课程座位充足
        Integer hasNumber = applyHasNumber.decrementAndGet();
        if (hasNumber < 0) {
            //减之前已经是0了
            return -2;
        }
        return hasNumber;
    }
}
